package com.js.data.system.service;

import com.js.data.common.dto.SecurityUserDTO;
import com.js.data.system.dto.BatchUserPermDTO;
import com.js.data.system.dto.PasswordDTO;
import com.js.data.system.dto.UserDTO;
import com.js.data.system.entity.SysUser;
import com.js.data.system.query.UserQuery;
import com.js.data.system.vo.UserPageVO;
import com.js.data.system.vo.UserVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;


/**
 * <p>
 * 系统用户 服务类
 * </p>
 *
 * @author wujj
 * @since 2022-09-06
 */
public interface UserService extends IService<SysUser> {

    /**
     * 用户分页
     *
     * @param query 查询条件
     * @return IPage<UserPageVO>
     */
    IPage<UserPageVO> pageUser(UserQuery query);

    /**
     * 保存用户
     *
     * @param userDTO 用户表单
     */
    void saveUser(UserDTO userDTO);

    /**
     * 修改用户
     *
     * @param id      用户uid
     * @param userDTO 用户表单
     */
    void editUser(Long id, UserDTO userDTO);

    /**
     * 删除用户
     *
     * @param id 用户id
     */
    void deleteUser(Long id);


    /**
     * 获取用户详情
     *
     * @param id 用户id
     * @return UserVO
     */
    UserVO getUser(Long id);

    /**
     * 启用用户
     *
     * @param id 用户id
     */
    void stateUser(Long id);

    /**
     * 根据登录名获取用户登录信息
     *
     * @param username 用户名
     * @return SecurityUserDTO
     */
    SecurityUserDTO getUserByUserName(String username);

    /**
     * 用户修改密码
     *
     * @param passwordDTO 表单
     */
    void resetPassword(PasswordDTO passwordDTO);

    /**
     * 批量修改用户角色权限
     *
     * @param batchUserPermDTO 批量用户数据权限修改表单
     */
    void batchUserRolePerm(BatchUserPermDTO batchUserPermDTO);

    /**
     * 批量删除用户
     *
     * @param batchUserPermDTO 批量用户数据权限修改表单
     */
    void batchDeleteUser(BatchUserPermDTO batchUserPermDTO);

    /**
     * 批量修改用户部门数据权限
     *
     * @param batchUserPermDTO 批量用户数据权限修改表单
     */
    void batchUserDeptPerm(BatchUserPermDTO batchUserPermDTO);
}
